﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.ProtocolBuffers;
using com.gexin.rp.sdk.dto;
using com.igetui.api.openservice;
using com.igetui.api.openservice.igetui;
using com.igetui.api.openservice.igetui.template;
using com.igetui.api.openservice.payload;
using System.Net;
using YunSpace.Core;

namespace YunSpace.ThirdService.GetUI
{
    /// <summary>
    /// 个推
    /// http://docs.getui.com/getui/
    /// </summary>
    public class GetUISendManger
    {
        #region 1. 参数设置
        //参数设置 <-----参数需要重新设置----->
        //http的域名
        private static String HOST
        {
            get
            {
                return Configs.GetValue("GetUI_SendServerUrl");
            }
        }

        //https的域名
        //private static String HOST = "https://api.getui.com/apiex.htm";

        //定义常量, appId、appKey、masterSecret 采用本文档 "第二步 获取访问凭证 "中获得的应用配置
        static String APPID
        {
            get
            {
                return Configs.GetValue("GetUI_AppID");
            }
        }
        static String APPKEY
        {
            get
            {
                return Configs.GetValue("GetUI_AppKey");
            }
        }
        private static String MASTERSECRET
        {
            get
            {
                return Configs.GetValue("GetUI_MasterSecret");
            }
        }

        //private static String CLIENTID = "e605a0db5ce3cca9b76b012978064940";

        //private static String DeviceToken = "";  //填写IOS系统的DeviceToken 
        #endregion

        #region 2.TEMPLATE
        //通知透传模板动作内容
        private static NotificationTemplate NotificationTemplateDemo(string content)
        {
            NotificationTemplate template = new NotificationTemplate();
            template.AppId = APPID;
            template.AppKey = APPKEY;
            //通知栏标题
            template.Title = "嗨空间";
            //通知栏内容     
            template.Text = "您有一条嗨空间消息";
            //通知栏显示本地图片
            template.Logo = "";
            //通知栏显示网络图标
            template.LogoURL = "http://storage.yunspace.com.cn/minisite_message_logo.png";
            //应用启动类型，1：强制应用启动  2：等待应用启动
            template.TransmissionType = "1";
            //透传内容  
            //template.TransmissionContent = "请填写透传内容";
            template.TransmissionContent = content;
            //接收到消息是否响铃，true：响铃 false：不响铃   
            template.IsRing = true;
            //接收到消息是否震动，true：震动 false：不震动   
            template.IsVibrate = true;
            //接收到消息是否可清除，true：可清除 false：不可清除    
            template.IsClearable = true;
            //设置通知定时展示时间，结束时间与开始时间相差需大于6分钟，消息推送后，客户端将在指定时间差内展示消息（误差6分钟）
            //String begin = "2015-03-06 14:36:10";
            //String end = "2015-03-06 14:46:20";
            //template.setDuration(begin, end);

            return template;
        }

        //透传模板动作内容
        private static TransmissionTemplate TransmissionTemplateDemo(string content)
        {
            TransmissionTemplate template = new TransmissionTemplate();
            template.AppId = APPID;
            template.AppKey = APPKEY;
            //应用启动类型，1：强制应用启动 2：等待应用启动
            template.TransmissionType = "1";
            //透传内容  
            //template.TransmissionContent = "透传内容";
            template.TransmissionContent = content;
            ////设置通知定时展示时间，结束时间与开始时间相差需大于6分钟，消息推送后，客户端将在指定时间差内展示消息（误差6分钟）
            //String begin = "2015-03-06 14:36:10";
            //String end = "2015-03-06 14:46:20";
            //template.setDuration(begin, end);

            return template;
        }

        //网页模板内容
        private static LinkTemplate LinkTemplateDemo()
        {
            LinkTemplate template = new LinkTemplate();
            template.AppId = APPID;
            template.AppKey = APPKEY;
            //通知栏标题
            template.Title = "请填写通知标题";
            //通知栏内容 
            template.Text = "请填写通知内容";
            //通知栏显示本地图片 
            template.Logo = "";
            //通知栏显示网络图标，如无法读取，则显示本地默认图标，可为空
            template.LogoURL = "";
            //打开的链接地址    
            template.Url = "http://www.baidu.com";
            //接收到消息是否响铃，true：响铃 false：不响铃   
            template.IsRing = true;
            //接收到消息是否震动，true：震动 false：不震动   
            template.IsVibrate = true;
            //接收到消息是否可清除，true：可清除 false：不可清除
            template.IsClearable = true;
            return template;
        }

        //通知栏弹框下载模板
        private static NotyPopLoadTemplate NotyPopLoadTemplateDemo()
        {
            NotyPopLoadTemplate template = new NotyPopLoadTemplate();
            template.AppId = APPID;
            template.AppKey = APPKEY;
            //通知栏标题
            template.NotyTitle = "请填写通知标题";
            //通知栏内容
            template.NotyContent = "请填写通知内容";
            //通知栏显示本地图片
            template.NotyIcon = "icon.png";
            //通知栏显示网络图标
            template.LogoURL = "http://www-igexin.qiniudn.com/wp-content/uploads/2013/08/logo_getui1.png";
            //弹框显示标题
            template.PopTitle = "弹框标题";
            //弹框显示内容    
            template.PopContent = "弹框内容";
            //弹框显示图片    
            template.PopImage = "";
            //弹框左边按钮显示文本    
            template.PopButton1 = "下载";
            //弹框右边按钮显示文本    
            template.PopButton2 = "取消";
            //通知栏显示下载标题
            template.LoadTitle = "下载标题";
            //通知栏显示下载图标,可为空 
            template.LoadIcon = "file://push.png";
            //下载地址，不可为空
            template.LoadUrl = "http://www.appchina.com/market/d/425201/cop.baidu_0/com.gexin.im.apk ";
            //应用安装完成后，是否自动启动
            template.IsActived = true;
            //下载应用完成后，是否弹出安装界面，true：弹出安装界面，false：手动点击弹出安装界面 
            template.IsAutoInstall = true;
            //接收到消息是否响铃，true：响铃 false：不响铃
            template.IsBelled = true;
            //接收到消息是否震动，true：震动 false：不震动   
            template.IsVibrationed = true;
            //接收到消息是否可清除，true：可清除 false：不可清除    
            template.IsCleared = true;
            return template;
        } 
        #endregion

        /// <summary>
        /// 对单个用户的推送
        /// </summary>
        public static string PushMessageToSingle(string clientId, string content) {
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);

            //消息模版：TransmissionTemplate:透传模板

            //TransmissionTemplate template = TransmissionTemplateDemo(content);
            var template = NotificationTemplateDemo(content);

            // 单推消息模型
            SingleMessage message = new SingleMessage();
            message.IsOffline = true;                         // 用户当前不在线时，是否离线存储,可选
            message.OfflineExpireTime = 1000 * 3600 * 12;            // 离线有效时间，单位为毫秒，可选
            message.Data = template;
            //判断是否客户端是否wifi环境下推送，2为4G/3G/2G，1为在WIFI环境下，0为不限制环境
            //message.PushNetWorkType = 1;  

            com.igetui.api.openservice.igetui.Target target = new com.igetui.api.openservice.igetui.Target();
            target.appId = APPID;
            target.clientId = clientId;
            //target.alias = ALIAS;
            try
            {
                var pushResult = push.pushMessageToSingle(message, target);

                return pushResult;
            }
            catch (RequestException e)
            {
                var requestId = e.RequestId;
                //发送失败后的重发
                var pushResult = push.pushMessageToSingle(message, target, requestId);

                return pushResult;
            }
        }

        /// <summary>
        /// 批量单推
        /// </summary>
        public static string PushMessageToSingleBatch(Dictionary<string, string> keyValues)
        {
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);
            IBatch batch = new BatchImpl(APPKEY, push);

            foreach (var item in keyValues)
            {
                //消息模版：TransmissionTemplate:透传模板
                //TransmissionTemplate templateTrans = TransmissionTemplateDemo();
                var template = NotificationTemplateDemo(item.Value);

                // 单推消息模型
                SingleMessage messageTrans = new SingleMessage();
                messageTrans.IsOffline = true;                                // 用户当前不在线时，是否离线存储,可选
                messageTrans.OfflineExpireTime = 1000 * 3600 * 12;            // 离线有效时间，单位为毫秒，可选
                messageTrans.Data = template;
                //判断是否客户端是否wifi环境下推送，2为4G/3G/2G，1为在WIFI环境下，0为不限制环境
                //messageTrans.PushNetWorkType = 1;  

                com.igetui.api.openservice.igetui.Target targetTrans = new com.igetui.api.openservice.igetui.Target();
                targetTrans.appId = APPID;
                targetTrans.clientId = item.Key;
                batch.add(messageTrans, targetTrans);
            }

            try
            {
                return batch.submit();
            }
            catch (Exception e)
            {
                return batch.retry();
            }
        }


    }
}
